As computing devices have evolved to host greater numbers of concurrent processes (or “applications”), the need to efficiently manage system resources has increased. Volatile memory, such as Random Access Memory (“RAM”), is commonly used to store data associated with processes executing on a computing device. For example, volatile memory can be utilized to store data that is to be referenced by an executing process, such as data read from a storage medium with lower access speeds. Volatile memory also can be used to store the results generated by an executing process, such as data that is to be output to a presentation device or a persistent storage device. Memory controllers continually refresh the volatile memory to ensure that stored data is not lost. Further, memory controllers can be used to read information from and write information to the volatile memory.
The processes executing in a computing device are required to share the finite physical memory, including the volatile memory, that is available. Further, although a process can request and reserve a portion of the physical memory, the process must know how to address the memory it can use. In order to avoid conflicts, virtual memory has been implemented to permit executing processes to address virtual memory addresses without regard to physical memory addresses. An operating system kernel can be used to manage access to the physical memory by translating virtual memory addresses into physical memory addresses. For example, a page table for each process can be maintained by the kernel and used to translate virtual memory addresses into physical memory addresses.
Further, data stored in the physical memory can be transferred between processes. Because the application programming interface (API) and buffering scheme of a first process may be incompatible with the API and/or buffering scheme of a second process, the data can be reproduced in the receiving location. For example, data associated with the first process can be made available to the second process, which is executing within the same computing device, by copying the data from a physical memory address associated with the first process to a physical memory address associated with the second process. In this manner, data generated by one process, such as a result, can be provided as input to another process that is executing on the same computing device.